# token 工具类

import jwt
from datetime import datetime, timedelta, timezone

from rest_framework_simplejwt.serializers import TokenObtainPairSerializer

from Django_demo01 import settings


def generate_access_token(user):
    """
    生成 access_token
    不使用django5内置认证系统
    有效期：1天
    """
    payload = {
        'user_id': user.id,
        'user_no': user.user_no,
        'user_name': user.user_name,
        'role_id': user.role_id,
        'email': user.email,
        'phone': user.phone,
        'status': user.status,
        'create_date': user.create_date.strftime("%Y-%m-%d %H:%M:%S"),
        'exp': datetime.now(timezone.utc) + timedelta(days=1),  # 设置过期时间
        # 在验证 JWT 时，可以检查 iat 声明，确保令牌是在合理的时间范围内签发的
        'iat': datetime.now(timezone.utc),  # 设置签发时间
    }
    secret_key = settings.SECRET_KEY  # 密钥
    token = jwt.encode(payload, secret_key, algorithm='HS256')
    return token


def generate_refresh_token(user):
    """
    生成 refresh_token
    不使用django5内置认证系统
    有效期：30天
    """
    payload = {
        'user_id': user.id,
        'user_no': user.user_no,
        'user_name': user.user_name,
        'role_id': user.role_id,
        'email': user.email,
        'phone': user.phone,
        'status': user.status,
        'create_date': user.create_date.strftime("%Y-%m-%d %H:%M:%S"),
        'exp': datetime.now(timezone.utc) + timedelta(days=30),  # 设置过期时间
        # 在验证 JWT 时，可以检查 iat 声明，确保令牌是在合理的时间范围内签发的
        'iat': datetime.now(timezone.utc),  # 设置签发时间
    }
    secret_key = settings.SECRET_KEY  # 密钥
    token = jwt.encode(payload, secret_key, algorithm='HS256')
    return token
